package com.example.websockettest.api;

import org.springframework.web.bind.annotation.RestController;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;

@ServerEndpoint("/api/fileSocket")
@RestController
public class FileWebSocketAPI {

	/**
	 * 连接建立成功调用的方法
	 */
	@OnOpen
	public void onOpen(Session session) {
		System.out.println("有新连接加入！ID是：" + session.getId());
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose(Session session) throws IOException {
		System.out.println("有一连接关闭！ID是：" + session.getId());
		session.close();
	}

	/**
	 * 收到客户端消息后调用的方法
	 */
	@OnMessage
	public void onMessage(byte[] content, Session session) throws Exception {
		// 接收文件
		System.out.println("正在接受文件...");
		FileOutputStream fileStream = new FileOutputStream("E:\\中转\\get.png");
		fileStream.write(content);
		fileStream.close();
		System.out.println("写入完成！");
		// 返回一个文件试试
		FileInputStream inputStream = new FileInputStream("C:\\Users\\swsk33\\Pictures\\Saved Pictures\\illust_86162846_20210615_002951.png");
		ByteBuffer buffer = ByteBuffer.wrap(inputStream.readAllBytes());
		inputStream.close();
		// 异步发送防止阻塞
		session.getAsyncRemote().sendBinary(buffer);
	}

	/**
	 * 发生错误时调用
	 */
	@OnError
	public void onError(Session session, Throwable error) {
		System.out.println("发生错误！发生时间：" + System.currentTimeMillis() + "，ID是：" + session.getId());
		error.printStackTrace();
	}

}